iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
自我挑戰組

Python 學習整理系列 第 14

Day14. Python 例外類型

  • 分享至 

  • xImage
  •  

重點

  • SyntaxError
  • NameError
  • TypeError
  • ValueError
  • IndentationError
  • IndexError
  • ZeroDivisionError

為什麼要學例外類型

  • 瞭解程式可能會出什麼錯

常見的例外類型介紹-SyntaxError

  • SyntaxError 表示語法錯誤
  • 造成 SyntaxError 的可能原因
    • 未在if, elif, else, for, while, def 等尾端加上冒號
    • 在判斷式中,將 == 誤用為 =
    • 字串前後的引號不完全
    • 使用 python 內建關鍵字作為變數名稱
    • 使用:not, and, or, for, while.....

例1.使用 if 敘述句時未加上冒號

a = 15
if a > 5
print(a)
# SyntaxError: expected ':'

例2.進行判斷時,將 == 誤用為 =

a = '早安您好'
if a = '早安您好':
    print('True')
# SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

例3.字串前後的引號不完全

name = 'Jason

print(name)
# SyntaxError: unterminated string literal

例4.使用內建關鍵字作為變數名稱

True = 'Jason'

print(True)
# SyntaxError: cannot assign to True

常見的例外類型介紹-NameError

  • NameError 表示為變數名稱錯誤
  • 造成 NameError 的可能原因
    • 使用了未定義的變數
    • 打錯變數名稱

例1.使用尚未宣告的變數名稱

print(name + 3)
# NameError: name 'name' is not defined

例2.打錯變數名稱

country = ['美國', '德國', '法國', '英國']
print(countr[0])
# NameError: name 'countr' is not defined.

常見的例外類型介紹-TypeError

  • TypeError 表示類型錯誤,即誤用變數的資料型態
  • 造成 TypeError 的可能原因
    • 試圖更改字串裡的特殊字元
    • 嘗試連接字串及非字串時
    • 對著整數跑 for i in 整數、對著串列跑 for i in range(串列)

例1.試圖更改字串裡的特殊字元

name = 'Jason'
name[0] = 'L'
# TypeError: 'str' object does not support item assignment

例2.嘗試連接字串及非字串時

score = 90
addscore = '考試成績:' + score
# TypeError: can only concatenate str (not "int") to str

例3.迴圈條件設定錯誤

for i in 5:
    print(i)
# TypeError: 'int' object is not iterable
# 正確寫法為 fot i in range(5)

例4.迴圈條件設定錯誤

database = [1, 2, 3, 4, 5, 6]
for i in range(database):
    print(i)
# TypeError: 'list' object cannot be interpreted as an integer
# 正確寫法為 fot i in range(len(database))

常見的例外類型介紹-ValueError

  • ValueError 表示資料型態是正確的,但為不恰當的值
  • 造成 ValueError 的可能原因
    • 將非數字的字串轉換為整數、浮點數

例1.將非數字的字串轉換為整數、浮點數

print(int('HelloWorld'))
# ValueError: invalid literal for int() with base 10: 'HelloWorl

常見的例外類型介紹-IndentationError

  • IndentationError 表示縮排錯誤
  • 造成 IndentationError 的可能原因
    • 混用 Tab 以及空格作為縮排的方式
    • 該縮排忘記縮排

例1.未正確縮排

countries = ['美國', '英國', '法國', '德國']
for country in countries:
print(country)
# IndentationError: expected an indented block

常見的例外類型介紹-IndexError

  • IndexError 表示索引值錯誤
  • 造成 IndexError 的可能原因
    • 使用到了可用範圍之外的索引值,常發生於對字串、串列取值時

例1.使用可用範圍之外的索引值

saySomething = "HelloWorld"
for i in range(len(saySomething) + 1):
    print(saySomething[i], end='!')
# IndexError: string index out of range

常見的例外類型介紹 - ZeroDivisionError

  • ZeroDivisionError 表示將零作為除數的錯誤
  • 造成 ZeroDivisionError 的可能原因
    • 進行運算時,以零作為除數

例1.以零作為餘數

print(1 / 0)
# ZeroDivisionError: division by zero

表格整理:

例外類型 說明
SyntaxError 語法錯誤
NameError 變數名稱錯誤
TypeError 類型錯誤
ValueError 值錯誤
IndentationError 縮排錯誤
IndexError 索引值錯誤
ZeroDivisionError 除數為零的錯誤

參考資料
Yes


上一篇
Day13. 巢狀結構、break & continue
下一篇
Day15. Python 函式
系列文
Python 學習整理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言